package com.sanbi.erp.db.dao;

import com.sanbi.erp.db.domain.Product;
import com.sanbi.erp.db.domain.ProductEasyExcelAdd;
import com.sanbi.erp.db.domain.ProductEasyExcelGroupAdd;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ProductMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Product record);

    int insertSelective(Product record);

    Product selectByPrimaryKey(Integer id);

    Product selectByPrimaryKeyByCategoryId(Integer id);

    /**
     * 获取商品信息
     * @param matching 1 精确匹配 2 模糊匹配
     * @param detailsType 1 库存sku 2 店铺sku 3 中文名称 4 英文名称 5 供应商
     * @param message 查询内容
     * @param skuState sku状态 0 全部 1 正常销售，2 停止销售，3 清仓
     * @param categoryId 类目id 0 全部
     * @return
     */
    List<Product> selectLinkList(@Param("matching") Integer matching,@Param("detailsType")  Integer detailsType,@Param("message")  String message,@Param("skuState") Integer skuState,@Param("categoryId") Integer categoryId);

    /**
     * 获取商品信息
     * 获取商品信息（单商品）
     * detailsType 1 商品sku 2 店铺sku 3 中文名称 4 英文名称 5 供应商
     * @return
     */
    List<Product> getListDoubleClick(@Param("detailsType") Integer detailsType,@Param("list") List<String> list,@Param("string") String string);

    /**
     * 获取单个商品的信息
     * @return
     */
    Product selectOne(@Param("id") Integer id);

    /**
     * 获取单个商品的信息（组合商品）
     * @return
     */
    Product selectOneGroup(@Param("id") Integer id);

    /**
     * 获取商品信息（组合商品）
     * {detailsType 0 默认 1 库存sku 2 店铺sku 3 中文名称 4 英文名称 5 供应商,
     *  matching  0 默认 1 精确匹配 2 模糊匹配,
     *  message 查询内容,
     *  skuState sku状态 0 全部 1 正常销售，2 停止销售，3 清仓,
     *  categoryId 类目id 0 全部 }
     * @return
     */
    List<Product> selectLinkListGroup(@Param("matching") Integer matching,@Param("detailsType")  Integer detailsType,@Param("message")  String message,@Param("skuState") Integer skuState,@Param("categoryId") Integer categoryId);

    /**
     * 批量导出选择的商品（组合商品）
     * 嵌套子查询
     * @param list
     * @param productId
     * @return
     */
    List<Product> selectLinkListGroupById(@Param("list") List<Integer> list, @Param("productId") Integer productId);

    List<Product> selectLinkListGroupBySku(@Param("list") List<String> list, @Param("productSku") String productSku);

    /**
     * 查询商品信息 组合商品新增时使用（组合商品）
     * {detailsType 1 库存sku  3 中文名称 4 英文名称,
     *  matching   1 精确匹配 2 模糊匹配,
     *  message 查询内容,}
     * @return
     */
    List<Product> getListGroupBySku(@Param("matching") Integer matching,@Param("detailsType")  Integer detailsType,@Param("message")  String message);

    /**
     * 查询商品信息 新增采购计划时使用
     * {detailsType 1 单个商品sku  2 组合商品sku,
     *  matching   1 精确匹配 2 模糊匹配,
     *  message 查询内容}
     * @return
     */
    List<Product> getListByProductSku(@Param("matching") Integer matching,@Param("detailsType")  Integer detailsType,@Param("message")  String message);

    /**
     * 获取批量导出的数据
     * @param matching 1 精确匹配 2 模糊匹配
     * @param detailsType 1 库存sku 2 店铺sku 3 中文名称 4 英文名称 5 供应商
     * @param message 查询内容
     * @param skuState sku状态 0 全部 1 正常销售，2 停止销售，3 清仓
     * @param categoryId 类目id 0 全部
     * @return
     */
    List<ProductEasyExcelAdd> batchDeriveExcel(@Param("matching") Integer matching, @Param("detailsType")  Integer detailsType, @Param("message")  String message, @Param("skuState") Integer skuState, @Param("categoryId") Integer categoryId);

    /**
     * 获取批量导出的数据 （组合商品）
     * {detailsType 0 默认 1 库存sku 2 店铺sku 3 中文名称 4 英文名称 5 供应商,
     *  matching  0 默认 1 精确匹配 2 模糊匹配,
     *  message 查询内容,
     *  skuState sku状态 0 全部 1 正常销售，2 停止销售，3 清仓,
     *  categoryId 类目id 0 全部 }
     * @return
     */
    List<ProductEasyExcelGroupAdd> batchDeriveExcelGroup(@Param("matching") Integer matching, @Param("detailsType")  Integer detailsType, @Param("message")  String message, @Param("skuState") Integer skuState, @Param("categoryId") Integer categoryId);

    // 批量导出(选择的商品)
    List<ProductEasyExcelAdd> batchDeriveExcelChooses(@Param("list") List<Integer> list, @Param("productId") Integer productId);

    // 批量导出组合商品(选择的商品)
    List<ProductEasyExcelGroupAdd> batchDeriveExcelChoosesGroup(@Param("list") List<Integer> list, @Param("productId") Integer productId);

    // 获取所有商品的id和sku
    List<Product> selectListAll();

    // 获取生成pdf文件的商品信息
    List<Product> selectListPdf(@Param("list") List<String> list,@Param("sku") String sku);

    // 校验sku是否存在
    List<Product> selectListBySKU(@Param("list") List<String> list,@Param("sku") String sku);

    int updateByPrimaryKeySelective(Product record);

    int updateByPrimaryKey(Product record);

    // 批量新增
    int insertSelectiveList(@Param("productList") List<Product> productList);

    // 批量修改
    int updateSelectiveList(@Param("productList") List<Product> productList);

    // 批量修改商品状态 state 1 正常销售 2 停止销售 3 清仓
    int updateProductStateBySku(@Param("productSkuList") List<String> productSkuList,@Param("state") Integer state);
}